4.2 Dockerfile 构建 django 环境 ( 拓展 )

学习目标:
应用 Dockerfile 的生产使用流程
应用 Dockerfile 定制 web 项目镜像

4.2.1 项目描述

基于我们在 shell 自动化运维课程中的项目案例,我们现在来使用 Dockerfile 做一个 Docker 镜像。

4.2.2 手工部署 django 项目环境

这一节,我们从需求、方案分析、技术关键点、方案、方案实施这五个方面来学习。
需求:
基于 docker 镜像,手工部署 django 项目环境
方案分析:
1 docker 环境部署
2 django 环境部署
3 djanog 项目部署
4 、测试
 
技术关键点:
1 docker 环境部署
使用 docker 镜像启动一个容器即可
2 django 环境部署
django 软件的依赖环境
django 软件的基本环境配置
3 django 项目部署
django 框架的下载
项目文件配置
启动 django 项目
4 、测试
宿主机测试
 
解决方案:
1 docker 环境配置
1.1 获取 docker 镜像
1.2 启动 docker 容器
2 django 环境部署
2.1 基础环境配置
2.2 django 环境配置
3 django 项目部署
3.1 创建 django 项目
3.2 创建 django 应用
3.3 项目启动
4 、测试
4.1 宿主机测试
 
方案实施:
1 docker 环境配置
1.1 获取 docker 镜像
ubuntu-ssh
1.2 启动 docker 容器
启动容器,容器名称叫 django
docker run -d -p 10086:22 --name django ubuntu-ssh
进入容器
ssh 192.168.8.14 -p 10086

2 django 环境部署
2.1 基础环境配置
基础目录环境
mkdir /data/{server,softs} -p
cd /data/softs
scp root@192.168.8.14:/data/softs/Django-2.1.2.tar.gz ./
注意:
因为我们的 docker 镜像就是唯一的,所以就没有必要单独创建 python 虚拟环境了
2.2 django 环境配置
安装基本依赖软件
apt-get install python3-pip -y
安装 django 软件
cd /data/softs
tar xf Django-2.1.2.tar.gz
cd Django-2.1.2
python3 setup.py install
3 django 项目部署
3.1 创建 django 项目
创建项目
cd /data/server
django-admin startproject itcast
3.2 创建 django 应用
创建应用
cd /data/server/itcast
python3 manage.py startapp test1
注册应用
# vim itcast/settings.py
INSTALL_APP = [
。。。
'test1',
]
配置应用
admin-1@ubuntu:/data/soft# cat /data/server/itcast/test1/views.py
from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
def hello(resquest):
   return HttpResponse("itcast V1.0")
url 文件配置
admin-1@ubuntu:/data/soft# cat /data/server/itcast/itcast/urls.py
...
from test1.views import *
urlpatterns = [
    path('admin/', admin.site.urls),
    path('hello/', hello),
]

 
3.3 项目启动
设置访问主机
# vim itcast/settings.py
...
ALLOWED_HOSTS = ['*']
启动项目
python3 manage.py runserver 172.17.0.2:8000

注意:
要提前用 ifconfig 来检查一下当前容器的 IP 地址,以方面接下来的测试
4 、测试
4.1 宿主机测试
查看容器的 ip 地址
docker inspect django
浏览器、或 curl 查看效果:
172.17.0.2:8000/hello/

4.2.3 Dockerfile 案例实践

这一节,我们从环境分析、关键点分析、定制方案、 Dockerfile 实践这三个方面来学习
 
环境分析:
1 、软件源文件,使用国外源,速度太慢,所以我们可以自己使用国内的软件源。
因为我们在手工部署的时候,使用的是官方 ( 国外 ) 的源,所以为了部署快一点呢,我使用国内的源。
2 、软件安装,涉及到了各种软件
3 、软件运行涉及到了软件的运行目录
4 、项目访问,涉及到端口
 
关键点分析:
1 、增加文件,使用 ADD 或者 COPY 指令
2 、安装软件,使用 RUN 指令
3 、命令运行,使用 WORKDIR   指令
4 、项目端口,使用 EXPOSE 指令
5 、容器运行,使用 ENTRYPOINT
 
定制方案:
1 、基于 ubuntu-ssh 基础镜像进行操作
2 、安装环境基本软件
3 、定制命令工作目录,并增加文件
4 、开放端口
5 、执行项目
 
Dockerfile 定制
进入标准目录
mkdir /docker/images/django -p
cd /docker/images/django
第一版 dockerfile 内容
# 构建一个基于ubuntu的docker定制镜像
# 基础镜像
FROM ubuntu-ssh
# 镜像作者
MAINTAINER President.Wang 000000@qq.com
# 执行命令
RUN apt-get install python3-pip -y
# 增加文件
ADD Django-2.1.2.tar.gz /data/softs/
WORKDIR /data/softs/Django-2.1.2
RUN python3 setup.py install
# 创建项目
WORKDIR /data/server
RUN django-admin startproject itcast
# 创建应用
WORKDIR /data/server/itcast
RUN python3 manage.py startapp test1
RUN sed -i "/staticfiles/a\    'test1'," itcast/settings.py
# 配置应用
COPY views.py /data/server/itcast/test1/
RUN sed -i '/t p/a\from test1.views import *' itcast/urls.py
RUN sed -i "/\]/i\    path('hello/', hello)," itcast/urls.py
# 启动项目
RUN sed -i "s#S = \[\]#S = \['*'\]#" itcast/settings.py
# 对外端口
EXPOSE 8000
# 运行项目
ENTRYPOINT ["python3","manage.py","runserver","0.0.0.0:8000"]
Django-2.1.2.tar.gz views.py 文件放到这个目录中
效果查看
构建镜像
docker build -t ubuntu-django .
运行镜像
docker run -p 8000:8000 -d ubuntu-django
访问镜像,查看效果